package com.nakaikensuke.SNE;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

public class DirCacheManager {
	private HashMap<String, DirCache> _entriesMap = new HashMap<String, DirCache>();

	private static final int ENTRIES_CACHE_MAX = 15;
	
	public void add(String path, List<DirEntry> entry) {
		/// キャッシュ最大件数に達した場合、テーブル先頭のエントリ列を削除するもっとも単純な実装。
		///	本来であれば、もっともアクセス回数が低いエントリを削除したりすべき
		if (_entriesMap.size() >= ENTRIES_CACHE_MAX) {
			Iterator<String> iterator = _entriesMap
					.keySet().iterator();
			_entriesMap.remove(iterator.next());
		}

		if (!_entriesMap.containsKey(path))
			_entriesMap.put(path, new DirCache(entry));
	}
	
	public DirEntry getEntry(String path, int position) {
		if (!_entriesMap.containsKey(path))
			return null;

		List<DirEntry> entries = _entriesMap.get(path).getEntries();
		if (position >= entries.size())
			return null;

		return entries.get(position);
	}
	
	public boolean isExist(String path) {
		return _entriesMap.containsKey(path);
	}
	
	public int getEntryNum(String path) {
		if (!_entriesMap.containsKey(path))
			return 0;

		return _entriesMap.get(path).getEntries().size();
	}
	
	public int getLineNumber(String path) {
		if (!_entriesMap.containsKey(path))
			return 0;

		return _entriesMap.get(path).getLineNumber();
	}
	
	public void setLineNumber(String path, int line) {
		if (!_entriesMap.containsKey(path))
			return;

		_entriesMap.get(path).setLineNumber(line);
	}
	
	public void deleteCacheEntry(String path) {
		if (!_entriesMap.containsKey(path))
			return;

		_entriesMap.remove(path);
	}
}
